Get a feel for the data

Before diving into our data cleaning routine, we must first understand the basic structure of the data. This involves looking at things like the class() of the data object to make sure it’s what we expect (generally a data.frame) in addition to checking its dimensions with dim() and the column names with names().

# Read weather data
library(readr)
weather <- readRDS("../xDatasets/weather.rds")
# Verify that weather is a data.frame
class(weather)
## [1] "data.frame"
# Check the dimensions
dim(weather)
## [1] 286  35
# View the column names
names(weather)
##  [1] "X"       "year"    "month"   "measure" "X1"      "X2"      "X3"     
##  [8] "X4"      "X5"      "X6"      "X7"      "X8"      "X9"      "X10"    
## [15] "X11"     "X12"     "X13"     "X14"     "X15"     "X16"     "X17"    
## [22] "X18"     "X19"     "X20"     "X21"     "X22"     "X23"     "X24"    
## [29] "X25"     "X26"     "X27"     "X28"     "X29"     "X30"     "X31"

We’ve confirmed that the object is a data frame with 286 rows and 35 columns. We’ll see what the columns represent in the upcoming exercises.

Summarize the data

Next up is to look at some summaries of the data. This is where functions like str(), glimpse() from dplyr, and summary() come in handy.

# View the structure of the data
str(weather, give.attr = FALSE)
## 'data.frame':    286 obs. of  35 variables:
##  $ X      : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ year   : int  2014 2014 2014 2014 2014 2014 2014 2014 2014 2014 ...
##  $ month  : int  12 12 12 12 12 12 12 12 12 12 ...
##  $ measure: chr  "Max.TemperatureF" "Mean.TemperatureF" "Min.TemperatureF" "Max.Dew.PointF" ...
##  $ X1     : chr  "64" "52" "39" "46" ...
##  $ X2     : chr  "42" "38" "33" "40" ...
##  $ X3     : chr  "51" "44" "37" "49" ...
##  $ X4     : chr  "43" "37" "30" "24" ...
##  $ X5     : chr  "42" "34" "26" "37" ...
##  $ X6     : chr  "45" "42" "38" "45" ...
##  $ X7     : chr  "38" "30" "21" "36" ...
##  $ X8     : chr  "29" "24" "18" "28" ...
##  $ X9     : chr  "49" "39" "29" "49" ...
##  $ X10    : chr  "48" "43" "38" "45" ...
##  $ X11    : chr  "39" "36" "32" "37" ...
##  $ X12    : chr  "39" "35" "31" "28" ...
##  $ X13    : chr  "42" "37" "32" "28" ...
##  $ X14    : chr  "45" "39" "33" "29" ...
##  $ X15    : chr  "42" "37" "32" "33" ...
##  $ X16    : chr  "44" "40" "35" "42" ...
##  $ X17    : chr  "49" "45" "41" "46" ...
##  $ X18    : chr  "44" "40" "36" "34" ...
##  $ X19    : chr  "37" "33" "29" "25" ...
##  $ X20    : chr  "36" "32" "27" "30" ...
##  $ X21    : chr  "36" "33" "30" "30" ...
##  $ X22    : chr  "44" "39" "33" "39" ...
##  $ X23    : chr  "47" "45" "42" "45" ...
##  $ X24    : chr  "46" "44" "41" "46" ...
##  $ X25    : chr  "59" "52" "44" "58" ...
##  $ X26    : chr  "50" "44" "37" "31" ...
##  $ X27    : chr  "52" "45" "38" "34" ...
##  $ X28    : chr  "52" "46" "40" "42" ...
##  $ X29    : chr  "41" "36" "30" "26" ...
##  $ X30    : chr  "30" "26" "22" "10" ...
##  $ X31    : chr  "30" "25" "20" "8" ...
# Load dplyr package
library(dplyr)

# Look at the structure using dplyr's glimpse()
glimpse(weather)
## Observations: 286
## Variables: 35
## $ X       <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,...
## $ year    <int> 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, ...
## $ month   <int> 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12...
## $ measure <chr> "Max.TemperatureF", "Mean.TemperatureF", "Min.Temperat...
## $ X1      <chr> "64", "52", "39", "46", "40", "26", "74", "63", "52", ...
## $ X2      <chr> "42", "38", "33", "40", "27", "17", "92", "72", "51", ...
## $ X3      <chr> "51", "44", "37", "49", "42", "24", "100", "79", "57",...
## $ X4      <chr> "43", "37", "30", "24", "21", "13", "69", "54", "39", ...
## $ X5      <chr> "42", "34", "26", "37", "25", "12", "85", "66", "47", ...
## $ X6      <chr> "45", "42", "38", "45", "40", "36", "100", "93", "85",...
## $ X7      <chr> "38", "30", "21", "36", "20", "-3", "92", "61", "29", ...
## $ X8      <chr> "29", "24", "18", "28", "16", "3", "92", "70", "47", "...
## $ X9      <chr> "49", "39", "29", "49", "41", "28", "100", "93", "86",...
## $ X10     <chr> "48", "43", "38", "45", "39", "37", "100", "95", "89",...
## $ X11     <chr> "39", "36", "32", "37", "31", "27", "92", "87", "82", ...
## $ X12     <chr> "39", "35", "31", "28", "27", "25", "85", "75", "64", ...
## $ X13     <chr> "42", "37", "32", "28", "26", "24", "75", "65", "55", ...
## $ X14     <chr> "45", "39", "33", "29", "27", "25", "82", "68", "53", ...
## $ X15     <chr> "42", "37", "32", "33", "29", "27", "89", "75", "60", ...
## $ X16     <chr> "44", "40", "35", "42", "36", "30", "96", "85", "73", ...
## $ X17     <chr> "49", "45", "41", "46", "41", "32", "100", "85", "70",...
## $ X18     <chr> "44", "40", "36", "34", "30", "26", "89", "73", "57", ...
## $ X19     <chr> "37", "33", "29", "25", "22", "20", "69", "63", "56", ...
## $ X20     <chr> "36", "32", "27", "30", "24", "20", "89", "79", "69", ...
## $ X21     <chr> "36", "33", "30", "30", "27", "25", "85", "77", "69", ...
## $ X22     <chr> "44", "39", "33", "39", "34", "25", "89", "79", "69", ...
## $ X23     <chr> "47", "45", "42", "45", "42", "37", "100", "91", "82",...
## $ X24     <chr> "46", "44", "41", "46", "44", "41", "100", "98", "96",...
## $ X25     <chr> "59", "52", "44", "58", "43", "29", "100", "75", "49",...
## $ X26     <chr> "50", "44", "37", "31", "29", "28", "70", "60", "49", ...
## $ X27     <chr> "52", "45", "38", "34", "31", "29", "70", "60", "50", ...
## $ X28     <chr> "52", "46", "40", "42", "35", "27", "76", "65", "53", ...
## $ X29     <chr> "41", "36", "30", "26", "20", "10", "64", "51", "37", ...
## $ X30     <chr> "30", "26", "22", "10", "4", "-6", "50", "38", "26", "...
## $ X31     <chr> "30", "25", "20", "8", "5", "1", "57", "44", "31", "30...
# View a summary of the data
sum_weather <- as.data.frame(do.call(cbind, lapply(weather, summary)))

sum_weather[,-1] %>% 
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = F, position = "left", , font_size = 11) %>%
  row_spec(0, bold = T, color = "white", background = "#3f7689")
year month measure X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29 X30 X31
Min. 2014 1 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286
1st Qu. 2015 4 character character character character character character character character character character character character character character character character character character character character character character character character character character character character character character character character
Median 2015 7 character character character character character character character character character character character character character character character character character character character character character character character character character character character character character character character character
Mean 2014.92307692308 6.92307692307692 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286 286
3rd Qu. 2015 10 character character character character character character character character character character character character character character character character character character character character character character character character character character character character character character character character
Max. 2015 12 character character character character character character character character character character character character character character character character character character character character character character character character character character character character character character character character

Take a closer look

After understanding the structure of the data and looking at some brief summaries, it often helps to preview the actual data. The functions head() and tail() allow you to view the top and bottom rows of the data, respectively. Recall you’ll be shown 6 rows by default, but you can alter this behavior with a second argument to the function.

# View first 15 rows
weather %>% 
  head(15) %>%
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = F, position = "left", , font_size = 11) %>%
  row_spec(0, bold = T, color = "white", background = "#3f7689")
X year month measure X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29 X30 X31
1 2014 12 Max.TemperatureF 64 42 51 43 42 45 38 29 49 48 39 39 42 45 42 44 49 44 37 36 36 44 47 46 59 50 52 52 41 30 30
2 2014 12 Mean.TemperatureF 52 38 44 37 34 42 30 24 39 43 36 35 37 39 37 40 45 40 33 32 33 39 45 44 52 44 45 46 36 26 25
3 2014 12 Min.TemperatureF 39 33 37 30 26 38 21 18 29 38 32 31 32 33 32 35 41 36 29 27 30 33 42 41 44 37 38 40 30 22 20
4 2014 12 Max.Dew.PointF 46 40 49 24 37 45 36 28 49 45 37 28 28 29 33 42 46 34 25 30 30 39 45 46 58 31 34 42 26 10 8
5 2014 12 MeanDew.PointF 40 27 42 21 25 40 20 16 41 39 31 27 26 27 29 36 41 30 22 24 27 34 42 44 43 29 31 35 20 4 5
6 2014 12 Min.DewpointF 26 17 24 13 12 36 -3 3 28 37 27 25 24 25 27 30 32 26 20 20 25 25 37 41 29 28 29 27 10 -6 1
7 2014 12 Max.Humidity 74 92 100 69 85 100 92 92 100 100 92 85 75 82 89 96 100 89 69 89 85 89 100 100 100 70 70 76 64 50 57
8 2014 12 Mean.Humidity 63 72 79 54 66 93 61 70 93 95 87 75 65 68 75 85 85 73 63 79 77 79 91 98 75 60 60 65 51 38 44
9 2014 12 Min.Humidity 52 51 57 39 47 85 29 47 86 89 82 64 55 53 60 73 70 57 56 69 69 69 82 96 49 49 50 53 37 26 31
10 2014 12 Max.Sea.Level.PressureIn 30.45 30.71 30.4 30.56 30.68 30.42 30.69 30.77 30.51 29.58 29.81 29.88 29.86 29.91 30.15 30.17 29.91 29.87 30.15 30.31 30.37 30.4 30.31 30.13 29.96 30.16 30.22 29.99 30.22 30.36 30.32
11 2014 12 Mean.Sea.Level.PressureIn 30.13 30.59 30.07 30.33 30.59 30.24 30.46 30.67 30.04 29.5 29.61 29.85 29.82 29.83 30.05 30.09 29.75 29.78 29.98 30.26 30.32 30.35 30.23 29.9 29.63 30.11 30.14 29.87 30.12 30.32 30.25
12 2014 12 Min.Sea.Level.PressureIn 30.01 30.4 29.87 30.09 30.45 30.16 30.24 30.51 29.49 29.43 29.44 29.81 29.78 29.78 29.91 29.92 29.69 29.71 29.86 30.17 30.28 30.3 30.16 29.55 29.47 29.99 30.03 29.77 30 30.23 30.13
13 2014 12 Max.VisibilityMiles 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 2 10 10 10 10 10 10 10
14 2014 12 Mean.VisibilityMiles 10 8 5 10 10 4 10 8 2 3 7 10 10 10 10 9 6 10 10 10 9 10 5 1 8 10 10 10 10 10 10
15 2014 12 Min.VisibilityMiles 10 2 1 10 5 0 5 2 1 1 1 7 10 10 10 5 1 10 10 7 6 4 1 0 1 10 10 10 10 10 10
# View the last 10 rows
weather %>% 
  tail(10) %>%
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = F, position = "left", , font_size = 11) %>%
  row_spec(0, bold = T, color = "white", background = "#3f7689")
X year month measure X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21 X22 X23 X24 X25 X26 X27 X28 X29 X30 X31
277 277 2015 12 Max.VisibilityMiles 10 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
278 278 2015 12 Mean.VisibilityMiles 8 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
279 279 2015 12 Min.VisibilityMiles 1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
280 280 2015 12 Max.Wind.SpeedMPH 15 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
281 281 2015 12 Mean.Wind.SpeedMPH 6 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
282 282 2015 12 Max.Gust.SpeedMPH 17 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
283 283 2015 12 PrecipitationIn 0.14 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
284 284 2015 12 CloudCover 7 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
285 285 2015 12 Events Rain NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
286 286 2015 12 WindDirDegrees 109 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA

Column names are values

The weather dataset suffers from one of the five most common symptoms of messy data: column names are values. In particular, the column names X1-X31 represent days of the month, which should really be values of a new variable called day.

The tidyr package provides the gather() function for exactly this scenario.

gather(df, time, val, t1:t3)

Notice that gather() allows you to select multiple columns to be gathered by using the : operator.

# Load the tidyr package
library(tidyr)

# Gather the columns
weather2 <- gather(weather, day, value, X1:X31, na.rm = TRUE)

# View the head
weather2 %>%
  head() %>%
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = F, position = "left", , font_size = 11) %>%
  row_spec(0, bold = T, color = "white", background = "#3f7689")
X year month measure day value
1 2014 12 Max.TemperatureF X1 64
2 2014 12 Mean.TemperatureF X1 52
3 2014 12 Min.TemperatureF X1 39
4 2014 12 Max.Dew.PointF X1 46
5 2014 12 MeanDew.PointF X1 40
6 2014 12 Min.DewpointF X1 26

Values are variable names

Our data suffer from a second common symptom of messy data: values are variable names. Specifically, values in the measure column should be variables (i.e. column names) in our dataset.

The spread() function from tidyr is designed to help with this.

spread(df2, time, val)

Note how the values of the time column now become column names. The tidyr package is already loaded.

# First remove column of row names
without_x <- weather2[, -1]

# Spread the data
weather3 <- spread(without_x, measure, value)

# View the head
weather3 %>%
  head() %>%
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = F, position = "center", , font_size = 11) %>%
  row_spec(0, bold = T, color = "white", background = "#3f7689")
year month day CloudCover Events Max.Dew.PointF Max.Gust.SpeedMPH Max.Humidity Max.Sea.Level.PressureIn Max.TemperatureF Max.VisibilityMiles Max.Wind.SpeedMPH Mean.Humidity Mean.Sea.Level.PressureIn Mean.TemperatureF Mean.VisibilityMiles Mean.Wind.SpeedMPH MeanDew.PointF Min.DewpointF Min.Humidity Min.Sea.Level.PressureIn Min.TemperatureF Min.VisibilityMiles PrecipitationIn WindDirDegrees
2014 12 X1 6 Rain 46 29 74 30.45 64 10 22 63 30.13 52 10 13 40 26 52 30.01 39 10 0.01 268
2014 12 X10 8 Rain 45 29 100 29.58 48 10 23 95 29.5 43 3 13 39 37 89 29.43 38 1 0.28 357
2014 12 X11 8 Rain-Snow 37 28 92 29.81 39 10 21 87 29.61 36 7 13 31 27 82 29.44 32 1 0.02 230
2014 12 X12 7 Snow 28 21 85 29.88 39 10 16 75 29.85 35 10 11 27 25 64 29.81 31 7 T 286
2014 12 X13 5 28 23 75 29.86 42 10 17 65 29.82 37 10 12 26 24 55 29.78 32 10 T 298
2014 12 X14 4 29 20 82 29.91 45 10 15 68 29.83 39 10 10 27 25 53 29.78 33 10 0.00 306

The dataset is looking better already!

Clean up dates

Now that the weather dataset adheres to tidy data principles, the next step is to prepare it for analysis. We’ll start by combining the year, month, and day columns and recoding the resulting character column as a date. We can use a combination of base R, stringr, and lubridate to accomplish this task.

tidyr and dplyr are already loaded.

# Load the stringr and lubridate packages
library(stringr)
library(lubridate)

# Remove X's from day column
weather3$day <- str_replace(weather3$day, "X", "")

# Unite the year, month, and day columns
weather4 <- unite(weather3, date, year, month, day, sep = "-")

# Convert date column to proper date format using lubridates's ymd()
weather4$date <- as.Date(weather4$date)

# Rearrange columns using dplyr's select()
weather5 <- select(weather4, date, Events, CloudCover:WindDirDegrees)

# View the head of weather5
weather5 %>%
  head() %>%
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = F, position = "left", , font_size = 11) %>%
  row_spec(0, bold = T, color = "white", background = "#3f7689")
date Events CloudCover Max.Dew.PointF Max.Gust.SpeedMPH Max.Humidity Max.Sea.Level.PressureIn Max.TemperatureF Max.VisibilityMiles Max.Wind.SpeedMPH Mean.Humidity Mean.Sea.Level.PressureIn Mean.TemperatureF Mean.VisibilityMiles Mean.Wind.SpeedMPH MeanDew.PointF Min.DewpointF Min.Humidity Min.Sea.Level.PressureIn Min.TemperatureF Min.VisibilityMiles PrecipitationIn WindDirDegrees
2014-12-01 Rain 6 46 29 74 30.45 64 10 22 63 30.13 52 10 13 40 26 52 30.01 39 10 0.01 268
2014-12-10 Rain 8 45 29 100 29.58 48 10 23 95 29.5 43 3 13 39 37 89 29.43 38 1 0.28 357
2014-12-11 Rain-Snow 8 37 28 92 29.81 39 10 21 87 29.61 36 7 13 31 27 82 29.44 32 1 0.02 230
2014-12-12 Snow 7 28 21 85 29.88 39 10 16 75 29.85 35 10 11 27 25 64 29.81 31 7 T 286
2014-12-13 5 28 23 75 29.86 42 10 17 65 29.82 37 10 12 26 24 55 29.78 32 10 T 298
2014-12-14 4 29 20 82 29.91 45 10 15 68 29.83 39 10 10 27 25 53 29.78 33 10 0.00 306

A closer look at column types

It’s important for analysis that variables are coded appropriately. This is not yet the case with our weather data. Recall that functions such as as.numeric() and as.character() can be used to coerce variables into different types.

It’s important to keep in mind that coercions are not always successful, particularly if there’s some data in a column that you don’t expect. For example, the following will cause problems:

as.numeric(c(4, 6.44, "some string", 222))

If you run the code above in the console, you’ll get a warning message saying that R introduced an NA in the process of coercing to numeric. This is because it doesn’t know how to make a number out of a string (“some string”).

# View the structure of weather5
str(weather5, give.attr = FALSE)
## 'data.frame':    366 obs. of  23 variables:
##  $ date                     : Date, format: "2014-12-01" "2014-12-10" ...
##  $ Events                   : chr  "Rain" "Rain" "Rain-Snow" "Snow" ...
##  $ CloudCover               : chr  "6" "8" "8" "7" ...
##  $ Max.Dew.PointF           : chr  "46" "45" "37" "28" ...
##  $ Max.Gust.SpeedMPH        : chr  "29" "29" "28" "21" ...
##  $ Max.Humidity             : chr  "74" "100" "92" "85" ...
##  $ Max.Sea.Level.PressureIn : chr  "30.45" "29.58" "29.81" "29.88" ...
##  $ Max.TemperatureF         : chr  "64" "48" "39" "39" ...
##  $ Max.VisibilityMiles      : chr  "10" "10" "10" "10" ...
##  $ Max.Wind.SpeedMPH        : chr  "22" "23" "21" "16" ...
##  $ Mean.Humidity            : chr  "63" "95" "87" "75" ...
##  $ Mean.Sea.Level.PressureIn: chr  "30.13" "29.5" "29.61" "29.85" ...
##  $ Mean.TemperatureF        : chr  "52" "43" "36" "35" ...
##  $ Mean.VisibilityMiles     : chr  "10" "3" "7" "10" ...
##  $ Mean.Wind.SpeedMPH       : chr  "13" "13" "13" "11" ...
##  $ MeanDew.PointF           : chr  "40" "39" "31" "27" ...
##  $ Min.DewpointF            : chr  "26" "37" "27" "25" ...
##  $ Min.Humidity             : chr  "52" "89" "82" "64" ...
##  $ Min.Sea.Level.PressureIn : chr  "30.01" "29.43" "29.44" "29.81" ...
##  $ Min.TemperatureF         : chr  "39" "38" "32" "31" ...
##  $ Min.VisibilityMiles      : chr  "10" "1" "1" "7" ...
##  $ PrecipitationIn          : chr  "0.01" "0.28" "0.02" "T" ...
##  $ WindDirDegrees           : chr  "268" "357" "230" "286" ...
# Examine the first 20 rows of weather5. Are most of the characters numeric?
weather5 %>%
  select(date, Events, CloudCover, Max.Humidity, PrecipitationIn) %>%
  head(20) %>%
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = F, position = "left", , font_size = 11) %>%
  row_spec(0, bold = T, color = "white", background = "#3f7689")
date Events CloudCover Max.Humidity PrecipitationIn
2014-12-01 Rain 6 74 0.01
2014-12-10 Rain 8 100 0.28
2014-12-11 Rain-Snow 8 92 0.02
2014-12-12 Snow 7 85 T
2014-12-13 5 75 T
2014-12-14 4 82 0.00
2014-12-15 2 89 0.00
2014-12-16 Rain 8 96 T
2014-12-17 Rain 8 100 0.43
2014-12-18 Rain 7 89 0.01
2014-12-19 4 69 0.00
2014-12-02 Rain-Snow 7 92 0.10
2014-12-20 Snow 6 89 T
2014-12-21 Snow 8 85 T
2014-12-22 Rain 7 89 0.05
2014-12-23 Rain 8 100 0.25
2014-12-24 Fog-Rain 8 100 0.56
2014-12-25 Rain 6 100 0.14
2014-12-26 1 70 0.00
2014-12-27 3 70 0.00
# See what happens if we try to convert PrecipitationIn to numeric
as.numeric(weather5$PrecipitationIn)[1:10]
## Warning: NAs durch Umwandlung erzeugt
##  [1] 0.01 0.28 0.02   NA   NA 0.00 0.00   NA 0.43 0.01

Scroll the output, notice the warning message. Go back to the results of the head command if need be. What values in PrecipitationIn would become NA if coerced to numbers? Why would they be in the dataset to begin with?

Column type conversions

As you saw in the last exercise, "T" was used to denote a trace amount (i.e. too small to be accurately measured) of precipitation in the PrecipitationIn column. In order to coerce this column to numeric, you’ll need to deal with this somehow. To keep things simple, we will just replace "T" with zero, as a string ("0").

The dplyr and stringr packages are already loaded!

# Replace "T" with "0" (T = trace)
weather5$PrecipitationIn <- str_replace(weather5$PrecipitationIn, "T", "0")

# Convert characters to numerics
weather6 <- mutate_at(weather5, vars(CloudCover:WindDirDegrees), funs(as.numeric))
## Warning: funs() is soft deprecated as of dplyr 0.8.0
## please use list() instead
## 
## # Before:
## funs(name = f(.)
## 
## # After: 
## list(name = ~f(.))
## This warning is displayed once per session.
# Look at result
str(weather6, give.attr = FALSE)
## 'data.frame':    366 obs. of  23 variables:
##  $ date                     : Date, format: "2014-12-01" "2014-12-10" ...
##  $ Events                   : chr  "Rain" "Rain" "Rain-Snow" "Snow" ...
##  $ CloudCover               : num  6 8 8 7 5 4 2 8 8 7 ...
##  $ Max.Dew.PointF           : num  46 45 37 28 28 29 33 42 46 34 ...
##  $ Max.Gust.SpeedMPH        : num  29 29 28 21 23 20 21 10 26 30 ...
##  $ Max.Humidity             : num  74 100 92 85 75 82 89 96 100 89 ...
##  $ Max.Sea.Level.PressureIn : num  30.4 29.6 29.8 29.9 29.9 ...
##  $ Max.TemperatureF         : num  64 48 39 39 42 45 42 44 49 44 ...
##  $ Max.VisibilityMiles      : num  10 10 10 10 10 10 10 10 10 10 ...
##  $ Max.Wind.SpeedMPH        : num  22 23 21 16 17 15 15 8 20 23 ...
##  $ Mean.Humidity            : num  63 95 87 75 65 68 75 85 85 73 ...
##  $ Mean.Sea.Level.PressureIn: num  30.1 29.5 29.6 29.9 29.8 ...
##  $ Mean.TemperatureF        : num  52 43 36 35 37 39 37 40 45 40 ...
##  $ Mean.VisibilityMiles     : num  10 3 7 10 10 10 10 9 6 10 ...
##  $ Mean.Wind.SpeedMPH       : num  13 13 13 11 12 10 6 4 11 14 ...
##  $ MeanDew.PointF           : num  40 39 31 27 26 27 29 36 41 30 ...
##  $ Min.DewpointF            : num  26 37 27 25 24 25 27 30 32 26 ...
##  $ Min.Humidity             : num  52 89 82 64 55 53 60 73 70 57 ...
##  $ Min.Sea.Level.PressureIn : num  30 29.4 29.4 29.8 29.8 ...
##  $ Min.TemperatureF         : num  39 38 32 31 32 33 32 35 41 36 ...
##  $ Min.VisibilityMiles      : num  10 1 1 7 10 10 10 5 1 10 ...
##  $ PrecipitationIn          : num  0.01 0.28 0.02 0 0 0 0 0 0.43 0.01 ...
##  $ WindDirDegrees           : num  268 357 230 286 298 306 324 79 311 281 ...

It looks like our data are finally in the correct formats and organized in a logical manner! Now that our data are in the right form, we can begin the analysis.

Find missing values

Before dealing with missing values in the data, it’s important to find them and figure out why they exist in the first place. If your dataset is too big to look at all at once, like it is here, remember you can use sum() and is.na() to quickly size up the situation by counting the number of NA values.

The summary() function may also come in handy for identifying which variables contain the missing values. Finally, the which() function is useful for locating the missing values within a particular column.

# Count missing values
sum(is.na(weather6))
## [1] 6
# Find missing values
sum_weather6 <- as.data.frame(do.call(cbind, lapply(weather6, summary)))
## Warning in (function (..., deparse.level = 1) : number of rows of result is
## not a multiple of vector length (arg 1)
sum_weather6 [,-1] %>% 
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = F, position = "left", , font_size = 11) %>%
  row_spec(0, bold = T, color = "white", background = "#3f7689")
Events CloudCover Max.Dew.PointF Max.Gust.SpeedMPH Max.Humidity Max.Sea.Level.PressureIn Max.TemperatureF Max.VisibilityMiles Max.Wind.SpeedMPH Mean.Humidity Mean.Sea.Level.PressureIn Mean.TemperatureF Mean.VisibilityMiles Mean.Wind.SpeedMPH MeanDew.PointF Min.DewpointF Min.Humidity Min.Sea.Level.PressureIn Min.TemperatureF Min.VisibilityMiles PrecipitationIn WindDirDegrees
Min. 366 0 -6 0 39 29.58 18 2 8 28 29.49 8 -1 4 -11 -18 16 29.16 -3 0 0 1
1st Qu. character 3 32 21 73.25 30 42 10 16 56 29.87 36.25 8 8 24 16.25 35 29.76 30 2 0 113
Median character 5 47.5 25.5 86 30.14 60 10 20 66 30.03 53.5 10 10 41 35 46 29.94 46 10 0 222
Mean 366 4.70765027322404 45.4754098360656 26.9888888888889 85.6857923497268 30.1553278688525 58.931693989071 9.90710382513661 20.620218579235 66.0218579234973 30.0382513661202 51.4043715846995 8.86065573770492 10.6803278688525 38.9590163934426 32.2459016393443 48.3087431693989 29.925956284153 43.327868852459 6.71584699453552 0.10155737704918 200.081967213115
3rd Qu. character 7 61 31.25 93 30.31 76 10 24 76.75 30.19 68 10 13 56 51 60 30.09 60 10 0.04 275
Max. character 8 75 94 1000 30.88 96 10 38 98 30.77 84 10 22 71 68 96 30.64 74 10 2.9 360
NA’s 366 0 -6 6 39 29.58 18 2 8 28 29.49 8 -1 4 -11 -18 16 29.16 -3 0 0 1
# Find indices of NAs in Max.Gust.SpeedMPH
ind <- which(is.na(weather6$Max.Gust.SpeedMPH))

# Look at the full rows for records missing Max.Gust.SpeedMPH
weather6[ind, ] %>% 
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = F, position = "left", , font_size = 11) %>%
  row_spec(0, bold = T, color = "white", background = "#3f7689")
date Events CloudCover Max.Dew.PointF Max.Gust.SpeedMPH Max.Humidity Max.Sea.Level.PressureIn Max.TemperatureF Max.VisibilityMiles Max.Wind.SpeedMPH Mean.Humidity Mean.Sea.Level.PressureIn Mean.TemperatureF Mean.VisibilityMiles Mean.Wind.SpeedMPH MeanDew.PointF Min.DewpointF Min.Humidity Min.Sea.Level.PressureIn Min.TemperatureF Min.VisibilityMiles PrecipitationIn WindDirDegrees
161 2015-05-18 Fog 6 52 NA 100 30.30 58 10 16 79 30.23 54 8 10 48 43 57 30.12 49 0 0 72
205 2015-06-03 7 48 NA 93 30.31 56 10 14 82 30.24 52 10 7 45 43 71 30.19 47 10 0 90
273 2015-08-08 4 61 NA 87 30.02 76 10 14 68 29.99 69 10 6 57 54 49 29.95 61 10 0 45
275 2015-09-01 1 63 NA 78 30.06 79 10 15 65 30.02 74 10 9 62 59 52 29.96 69 10 0 54
308 2015-10-12 0 56 NA 89 29.86 76 10 15 65 29.80 64 10 8 51 48 41 29.74 51 10 0 199
358 2015-11-03 1 44 NA 82 30.25 73 10 16 57 30.13 60 10 8 42 40 31 30.06 47 10 0 281

In this situation it’s unclear why these values are missing and there doesn’t appear to be any obvious pattern to their missingness, so we’ll leave them alone for now.

An obvious error

Besides missing values, we want to know if there are values in the data that are too extreme or bizarre to be plausible. A great way to start the search for these values is with summary().

Once implausible values are identified, they must be dealt with in an intelligent and informed way. Sometimes the best way forward is obvious and other times it may require some research and/or discussions with the original collectors of the data.

# Review distributions for all variables (see above)
#summary(weather6)

# Find row with Max.Humidity of 1000
ind <- which(weather6$Max.Humidity == 1000)

# Look at the data for that day
weather6[ind, ] %>% 
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = F, position = "left", , font_size = 11) %>%
  row_spec(0, bold = T, color = "white", background = "#3f7689")
date Events CloudCover Max.Dew.PointF Max.Gust.SpeedMPH Max.Humidity Max.Sea.Level.PressureIn Max.TemperatureF Max.VisibilityMiles Max.Wind.SpeedMPH Mean.Humidity Mean.Sea.Level.PressureIn Mean.TemperatureF Mean.VisibilityMiles Mean.Wind.SpeedMPH MeanDew.PointF Min.DewpointF Min.Humidity Min.Sea.Level.PressureIn Min.TemperatureF Min.VisibilityMiles PrecipitationIn WindDirDegrees
135 2015-04-21 Fog-Rain-Thunderstorm 6 57 94 1000 29.75 65 10 20 71 29.6 56 5 10 49 36 42 29.53 46 0 0.54 184
# Change 1000 to 100
weather6$Max.Humidity[ind] <- 100

Once you find obvious errors, it’s not too hard to fix them if you know which values they should take.

Another obvious error

You’ve discovered and repaired one obvious error in the data, but it appears that there’s another. Sometimes you get lucky and can infer the correct or intended value from the other data. For example, if you know the minimum and maximum values of a particular metric on a given day…

# Look at summary of Mean.VisibilityMiles
summary(weather6$Mean.VisibilityMiles)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  -1.000   8.000  10.000   8.861  10.000  10.000
# Get index of row with -1 value
ind <- which(weather6$Mean.VisibilityMiles == -1)

# Look at full row
weather6[ind,] %>% 
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = F, position = "left", , font_size = 11) %>%
  row_spec(0, bold = T, color = "white", background = "#3f7689")
date Events CloudCover Max.Dew.PointF Max.Gust.SpeedMPH Max.Humidity Max.Sea.Level.PressureIn Max.TemperatureF Max.VisibilityMiles Max.Wind.SpeedMPH Mean.Humidity Mean.Sea.Level.PressureIn Mean.TemperatureF Mean.VisibilityMiles Mean.Wind.SpeedMPH MeanDew.PointF Min.DewpointF Min.Humidity Min.Sea.Level.PressureIn Min.TemperatureF Min.VisibilityMiles PrecipitationIn WindDirDegrees
192 2015-06-18 5 54 23 72 30.14 76 10 17 59 30.04 67 -1 10 49 45 46 29.93 57 10 0 189
# Set Mean.VisibilityMiles to the appropriate value
weather6$Mean.VisibilityMiles[ind] <- 10

Check other extreme values

In addition to dealing with obvious errors in the data, we want to see if there are other extreme values. In addition to the trusty summary() function, hist() is useful for quickly getting a feel for how different variables are distributed.

# Look at histogram for MeanDew.PointF
hist(weather6$MeanDew.PointF)

# Look at histogram for Min.TemperatureF
hist(weather6$Min.TemperatureF)

# Compare to histogram for Mean.TemperatureF
hist(weather6$Mean.TemperatureF)

Finishing touches

Before officially calling our weather data clean, we want to put a couple of finishing touches on the data. These are a bit more subjective and may not be necessary for analysis, but they will make the data easier for others to interpret, which is generally a good thing.

There are a number of stylistic conventions in the R language. Depending on who you ask, these conventions may vary. Because the period (.) has special meaning in certain situations, we generally recommend using underscores (_) to separate words in variable names. We also prefer all lowercase letters so that no one has to remember which letters are uppercase or lowercase.

Finally, the events column (renamed to be all lowercase in the first instruction) contains an empty string ("") for any day on which there was no significant weather event such as rain, fog, a thunderstorm, etc. However, if it’s the first time you’re seeing these data, it may not be obvious that this is the case, so it’s best for us to be explicit and replace the empty strings with something more meaningful.

new_colnames <- c("date", "events", "cloud_cover", "max_dew_point_f",         "max_gust_speed_mph", "max_humidity", "max_sea_level_pressure_in", "max_temperature_f", "max_visibility_miles", "max_wind_speed_mph",       "mean_humidity", "mean_sea_level_pressure_in", "mean_temperature_f",        "mean_visibility_miles", "mean_wind_speed_mph", "mean_dew_point_f",           
"min_dew_point_f", "min_humidity", "min_sea_level_pressure_in", "min_temperature_f", "min_visibility_miles", "precipitation_in", "wind_dir_degrees")

# Clean up column names
names(weather6) <- new_colnames

# Replace empty cells in events column
weather6$events[weather6$events == ""] <- "None"
    
# Print the first 6 rows of weather6
weather6 %>% 
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = F, position = "left", , font_size = 11) %>%
  row_spec(0, bold = T, color = "white", background = "#3f7689") %>%
  scroll_box(width = "100%", height = "500px")
date events cloud_cover max_dew_point_f max_gust_speed_mph max_humidity max_sea_level_pressure_in max_temperature_f max_visibility_miles max_wind_speed_mph mean_humidity mean_sea_level_pressure_in mean_temperature_f mean_visibility_miles mean_wind_speed_mph mean_dew_point_f min_dew_point_f min_humidity min_sea_level_pressure_in min_temperature_f min_visibility_miles precipitation_in wind_dir_degrees
2014-12-01 Rain 6 46 29 74 30.45 64 10 22 63 30.13 52 10 13 40 26 52 30.01 39 10 0.01 268
2014-12-10 Rain 8 45 29 100 29.58 48 10 23 95 29.50 43 3 13 39 37 89 29.43 38 1 0.28 357
2014-12-11 Rain-Snow 8 37 28 92 29.81 39 10 21 87 29.61 36 7 13 31 27 82 29.44 32 1 0.02 230
2014-12-12 Snow 7 28 21 85 29.88 39 10 16 75 29.85 35 10 11 27 25 64 29.81 31 7 0.00 286
2014-12-13 None 5 28 23 75 29.86 42 10 17 65 29.82 37 10 12 26 24 55 29.78 32 10 0.00 298
2014-12-14 None 4 29 20 82 29.91 45 10 15 68 29.83 39 10 10 27 25 53 29.78 33 10 0.00 306
2014-12-15 None 2 33 21 89 30.15 42 10 15 75 30.05 37 10 6 29 27 60 29.91 32 10 0.00 324
2014-12-16 Rain 8 42 10 96 30.17 44 10 8 85 30.09 40 9 4 36 30 73 29.92 35 5 0.00 79
2014-12-17 Rain 8 46 26 100 29.91 49 10 20 85 29.75 45 6 11 41 32 70 29.69 41 1 0.43 311
2014-12-18 Rain 7 34 30 89 29.87 44 10 23 73 29.78 40 10 14 30 26 57 29.71 36 10 0.01 281
2014-12-19 None 4 25 23 69 30.15 37 10 17 63 29.98 33 10 11 22 20 56 29.86 29 10 0.00 305
2014-12-02 Rain-Snow 7 40 29 92 30.71 42 10 24 72 30.59 38 8 15 27 17 51 30.40 33 2 0.10 62
2014-12-20 Snow 6 30 26 89 30.31 36 10 21 79 30.26 32 10 10 24 20 69 30.17 27 7 0.00 350
2014-12-21 Snow 8 30 20 85 30.37 36 10 16 77 30.32 33 9 9 27 25 69 30.28 30 6 0.00 2
2014-12-22 Rain 7 39 22 89 30.40 44 10 18 79 30.35 39 10 8 34 25 69 30.30 33 4 0.05 24
2014-12-23 Rain 8 45 25 100 30.31 47 10 20 91 30.23 45 5 13 42 37 82 30.16 42 1 0.25 63
2014-12-24 Fog-Rain 8 46 15 100 30.13 46 2 13 98 29.90 44 1 6 44 41 96 29.55 41 0 0.56 12
2014-12-25 Rain 6 58 40 100 29.96 59 10 28 75 29.63 52 8 14 43 29 49 29.47 44 1 0.14 250
2014-12-26 None 1 31 25 70 30.16 50 10 18 60 30.11 44 10 11 29 28 49 29.99 37 10 0.00 255
2014-12-27 None 3 34 21 70 30.22 52 10 17 60 30.14 45 10 9 31 29 50 30.03 38 10 0.00 251
2014-12-28 Rain 8 42 31 76 29.99 52 10 22 65 29.87 46 10 14 35 27 53 29.77 40 10 0.01 252
2014-12-29 None 4 26 22 64 30.22 41 10 15 51 30.12 36 10 9 20 10 37 30.00 30 10 0.00 288
2014-12-03 Rain 8 49 38 100 30.40 51 10 29 79 30.07 44 5 12 42 24 57 29.87 37 1 0.44 254
2014-12-30 None 2 10 21 50 30.36 30 10 16 38 30.32 26 10 10 4 -6 26 30.23 22 10 0.00 313
2014-12-31 None 1 8 22 57 30.32 30 10 17 44 30.25 25 10 9 5 1 31 30.13 20 10 0.00 269
2014-12-04 None 3 24 33 69 30.56 43 10 25 54 30.33 37 10 12 21 13 39 30.09 30 10 0.00 292
2014-12-05 Rain 5 37 26 85 30.68 42 10 22 66 30.59 34 10 10 25 12 47 30.45 26 5 0.11 61
2014-12-06 Rain 8 45 25 100 30.42 45 10 22 93 30.24 42 4 8 40 36 85 30.16 38 0 1.09 313
2014-12-07 Rain 6 36 32 92 30.69 38 10 25 61 30.46 30 10 15 20 -3 29 30.24 21 5 0.13 350
2014-12-08 Snow 8 28 28 92 30.77 29 10 21 70 30.67 24 8 13 16 3 47 30.51 18 2 0.03 354
2014-12-09 Rain 8 49 52 100 30.51 49 10 38 93 30.04 39 2 20 41 28 86 29.49 29 1 2.90 38
2015-01-01 None 3 16 29 53 30.10 33 10 23 43 30.00 28 10 14 8 5 32 29.92 22 10 0.00 230
2015-01-10 None 1 8 23 62 30.50 24 10 20 49 30.34 21 10 12 3 -2 35 30.15 17 10 0.00 263
2015-01-11 None 6 22 24 63 30.66 33 10 17 49 30.58 24 10 10 6 -1 34 30.48 15 10 0.00 226
2015-01-12 Rain 8 36 23 100 30.45 38 10 17 72 30.23 36 7 9 28 17 44 30.11 33 1 0.20 242
2015-01-13 None 3 25 26 75 30.67 35 10 21 56 30.52 25 10 11 5 -4 36 30.19 15 10 0.00 347
2015-01-14 Snow 8 21 16 88 30.61 25 10 13 67 30.40 20 10 9 10 -4 46 30.18 14 6 0.00 323
2015-01-15 Fog-Snow 8 27 21 92 30.18 31 10 15 78 30.00 28 5 10 24 13 63 29.81 25 0 0.12 302
2015-01-16 None 2 21 39 71 30.11 38 10 29 52 29.82 27 10 16 10 -4 33 29.68 15 9 0.00 263
2015-01-17 None 1 11 31 67 30.38 22 10 22 46 30.31 16 10 11 -3 -9 25 30.14 9 10 0.00 253
2015-01-18 Rain 8 45 33 93 30.26 51 10 26 80 29.93 36 10 10 35 13 67 29.55 20 5 0.15 164
2015-01-19 None 3 43 31 86 29.73 46 10 23 70 29.65 39 10 15 30 20 53 29.55 32 10 0.00 262
2015-01-02 None 3 17 32 53 30.45 41 10 26 45 30.13 36 10 13 15 11 37 29.95 31 10 0.00 260
2015-01-20 None 3 20 30 59 29.98 39 10 23 44 29.83 33 10 14 13 5 29 29.75 27 10 0.00 270
2015-01-21 None 5 25 20 75 30.21 34 10 14 57 30.15 28 10 7 14 5 38 30.00 22 10 0.00 357
2015-01-22 Snow 6 26 17 78 30.22 37 10 14 67 30.19 33 10 7 22 19 56 30.16 29 8 0.00 335
2015-01-23 None 2 20 22 68 30.28 37 10 16 54 30.15 31 10 10 15 9 39 29.93 24 10 0.00 259
2015-01-24 Fog-Rain-Snow 8 32 24 100 29.92 34 10 18 82 29.52 33 3 10 29 21 63 29.16 31 0 0.71 290
2015-01-25 None 4 28 33 78 30.04 38 10 25 55 29.66 29 10 14 17 4 32 29.31 19 10 0.00 284
2015-01-26 Fog-Snow 8 25 43 92 30.15 29 10 33 71 30.05 20 5 16 15 -2 49 29.81 11 0 0.10 23
2015-01-27 Fog-Snow 8 14 45 92 29.76 19 4 32 85 29.59 17 1 22 11 7 77 29.49 14 0 0.95 335
2015-01-28 Snow 6 9 26 80 30.24 24 10 20 63 29.89 19 7 13 6 0 45 29.67 13 1 0.01 305
2015-01-29 None 3 22 17 75 30.32 32 10 13 57 30.23 21 10 4 10 -2 39 30.06 10 7 0.00 245
2015-01-03 Rain-Snow 7 36 25 100 30.68 37 10 22 72 30.54 30 6 10 20 8 43 30.24 22 1 0.62 81
2015-01-30 Snow 8 31 44 92 30.06 34 10 32 78 29.82 27 6 12 26 7 63 29.71 19 1 0.06 223
2015-01-31 Snow 5 7 48 83 30.04 21 10 36 56 29.84 16 6 22 0 -8 28 29.72 11 0 0.05 302
2015-01-04 Fog-Rain 8 50 26 100 30.16 52 10 17 95 29.81 44 4 8 41 34 89 29.57 35 0 0.57 260
2015-01-05 None 2 39 49 65 30.30 50 10 37 47 29.93 34 10 22 13 -6 29 29.61 17 10 0.00 280
2015-01-06 Snow 6 11 28 80 30.37 18 10 22 59 30.22 17 7 9 5 -5 37 30.00 15 1 0.02 262
2015-01-07 Snow 3 12 40 88 30.11 26 10 31 58 29.90 15 9 16 3 -13 28 29.76 4 2 0.00 272
2015-01-08 None 1 7 32 56 30.34 19 10 25 49 30.25 9 10 14 -8 -18 41 30.13 -1 10 0.00 259
2015-01-09 Snow 4 22 35 88 30.15 30 10 25 65 30.00 25 8 14 14 8 42 29.89 19 1 0.01 240
2015-02-01 None 4 11 29 67 30.16 30 10 22 48 30.12 21 10 12 2 -6 29 30.04 12 10 0.00 289
2015-02-10 Snow 7 21 24 88 30.13 30 10 21 76 30.10 22 8 11 15 10 63 30.06 14 1 0.05 359
2015-02-11 Snow 7 17 31 77 30.14 25 10 23 69 30.07 20 7 12 12 6 61 29.94 14 1 0.01 354
2015-02-12 Fog-Snow 8 25 21 92 29.92 30 10 16 77 29.76 23 6 5 17 7 61 29.69 16 0 0.03 321
2015-02-13 None 2 11 37 77 30.11 22 10 28 55 29.95 15 10 17 -5 -10 33 29.74 7 8 0.00 296
2015-02-14 Snow 6 29 24 100 30.10 30 10 22 73 29.77 17 6 10 11 -9 45 29.46 3 1 0.23 181
2015-02-15 Fog-Snow 6 18 51 92 29.82 20 10 33 71 29.49 9 3 21 9 -13 50 29.30 -2 0 0.39 320
2015-02-16 Snow 3 -6 41 56 30.04 19 10 31 44 29.91 8 9 20 -11 -16 31 29.81 -3 2 0.00 290
2015-02-17 Snow 7 18 18 84 30.03 23 10 14 63 29.93 17 7 8 6 -7 42 29.85 10 1 0.02 338
2015-02-18 Snow 8 23 17 81 29.95 29 10 14 66 29.83 23 8 5 16 8 50 29.70 17 1 0.01 337
2015-02-19 Snow 6 24 40 92 29.73 30 10 30 71 29.61 20 6 14 14 -5 50 29.53 10 1 0.06 263
2015-02-02 Fog-Snow 7 29 45 100 30.12 31 10 36 67 29.69 21 2 18 13 -5 34 29.48 10 0 0.78 360
2015-02-20 None 2 -4 35 55 30.43 20 10 28 45 30.04 13 10 19 -6 -10 34 29.74 5 10 0.00 273
2015-02-21 Rain-Snow 6 32 35 92 30.53 34 10 26 70 30.36 19 5 11 16 -5 48 30.16 4 1 0.17 201
2015-02-22 Rain-Snow 8 33 16 100 30.17 39 10 13 85 30.14 34 8 5 29 24 70 30.10 28 1 0.11 245
2015-02-23 None 5 23 35 72 30.32 33 10 25 51 30.18 19 10 15 2 -14 30 30.10 4 10 0.00 298
2015-02-24 Snow 6 15 24 80 30.33 19 10 20 60 30.18 11 10 9 -4 -15 39 29.88 2 5 0.00 221
2015-02-25 Snow 4 19 29 92 30.01 35 10 22 63 29.80 25 8 11 11 2 33 29.70 14 2 0.07 287
2015-02-26 Snow 8 16 21 84 30.12 22 10 18 65 30.05 20 8 9 8 2 45 29.97 17 1 0.02 351
2015-02-27 None 2 1 18 52 30.55 27 10 14 41 30.34 21 10 8 -2 -5 29 30.14 15 10 0.00 305
2015-02-28 None 0 4 20 58 30.75 31 10 15 43 30.69 22 10 9 1 -1 27 30.56 12 10 0.00 273
2015-02-03 Snow 1 7 33 73 30.31 22 10 24 56 30.12 14 9 13 1 -3 39 29.72 6 4 0.00 265
2015-02-04 None 7 30 26 75 30.32 38 10 20 64 30.16 26 10 9 17 3 53 29.94 14 10 0.00 209
2015-02-05 Fog-Rain-Snow 7 32 40 89 30.12 36 10 30 66 29.93 22 6 15 18 -7 42 29.82 7 0 0.09 303
2015-02-06 None 3 6 29 60 30.17 21 10 21 53 30.10 13 10 12 -1 -8 46 30.04 5 10 0.00 263
2015-02-07 Snow 7 27 26 92 30.10 29 10 20 74 30.05 23 7 11 17 5 55 30.01 16 1 0.07 226
2015-02-08 Snow 8 27 28 100 30.08 29 7 22 90 30.05 21 2 14 20 10 80 30.01 13 1 0.37 8
2015-02-09 Fog-Snow 8 21 32 92 30.16 25 4 26 86 30.12 20 1 15 14 10 80 30.08 14 0 0.88 351
2015-03-01 Snow 7 27 23 92 30.71 30 10 20 66 30.46 21 6 6 16 2 40 30.12 12 1 0.17 206
2015-03-10 Rain 7 39 21 100 30.34 48 10 17 69 30.19 40 8 7 28 19 37 30.00 31 1 0.06 193
2015-03-11 Fog-Rain 5 40 33 100 29.99 57 10 25 65 29.86 47 7 12 34 25 30 29.79 37 0 0.01 245
2015-03-12 None 2 27 41 59 30.56 43 10 32 42 30.28 34 10 17 12 1 25 29.94 25 10 0.00 315
2015-03-13 None 4 24 23 69 30.64 40 10 18 45 30.53 32 10 11 7 1 21 30.37 24 10 0.00 269
2015-03-14 Fog-Rain 7 39 20 100 30.36 39 10 15 80 30.03 35 4 8 32 19 59 29.63 31 0 0.80 56
2015-03-15 Fog-Rain-Snow 8 34 40 100 29.88 41 10 33 85 29.65 34 5 14 30 19 69 29.58 27 0 0.27 329
2015-03-16 None 2 23 25 63 29.95 45 10 18 41 29.86 36 10 9 14 5 19 29.77 26 10 0.00 275
2015-03-17 Rain-Snow 5 41 51 100 29.74 51 10 38 66 29.58 40 8 14 27 4 31 29.38 28 2 0.14 250
2015-03-18 None 1 7 52 46 30.08 30 10 36 35 29.88 26 10 22 0 -6 23 29.74 22 10 0.00 302
2015-03-19 None 1 0 41 39 30.34 34 10 30 30 30.19 27 10 16 -2 -4 21 30.09 19 10 0.00 306
2015-03-02 Rain-Snow 6 27 41 92 30.25 37 10 30 67 30.03 32 9 14 19 7 41 29.93 26 1 0.01 280
2015-03-20 Snow 7 26 26 100 30.40 32 10 12 67 30.32 28 7 4 13 0 33 30.19 23 1 0.05 150
2015-03-21 Snow 7 33 31 96 30.17 41 10 22 78 29.99 35 5 7 29 25 59 29.76 28 1 0.09 57
2015-03-22 None 1 23 48 54 30.11 39 10 33 38 29.93 30 10 18 5 -5 22 29.76 21 10 0.00 296
2015-03-23 None 0 6 31 49 30.23 33 10 24 38 30.13 26 10 15 0 -6 26 30.08 18 10 0.00 290
2015-03-24 None 4 24 16 72 30.35 35 10 13 59 30.31 28 10 8 15 6 46 30.24 20 10 0.00 214
2015-03-25 Rain 4 34 28 85 30.42 49 10 22 60 30.33 39 10 9 22 16 34 30.17 28 10 0.04 181
2015-03-26 Fog-Rain 8 52 23 100 30.16 56 10 16 86 29.82 47 5 9 45 35 71 29.64 38 0 0.80 223
2015-03-27 Rain 8 43 15 96 29.76 44 10 13 88 29.71 41 9 5 38 35 79 29.65 37 3 0.21 9
2015-03-28 Fog-Rain-Snow 8 36 30 96 30.02 40 10 24 78 29.81 35 4 13 30 19 59 29.71 30 0 0.12 355
2015-03-29 None 3 19 22 59 30.22 42 10 17 40 30.13 34 10 9 11 3 20 30.04 26 10 0.00 272
2015-03-03 Rain-Snow 6 31 32 92 30.41 33 10 24 60 30.17 27 6 10 14 1 28 29.80 20 1 0.26 213
2015-03-30 Rain-Snow 6 33 35 69 30.08 45 10 29 59 29.84 38 9 13 27 17 48 29.72 30 2 0.00 214
2015-03-31 None 3 28 29 70 29.79 50 10 20 51 29.73 44 10 12 24 18 31 29.69 37 10 0.00 279
2015-03-04 Rain 8 36 30 92 29.87 43 10 21 75 29.75 38 10 11 32 29 57 29.64 33 2 0.02 236
2015-03-05 Snow 8 28 28 76 30.32 39 10 20 56 30.07 29 9 12 11 -4 35 29.85 18 2 0.00 316
2015-03-06 None 2 11 29 62 30.51 24 10 23 48 30.42 17 10 10 -1 -8 34 30.29 9 10 0.00 277
2015-03-07 None 3 21 25 67 30.29 38 10 21 48 30.11 28 10 11 12 6 29 29.95 17 10 0.00 226
2015-03-08 Snow 4 27 32 78 30.12 42 10 25 58 30.03 33 10 9 20 13 38 29.94 24 7 0.00 247
2015-03-09 None 3 22 37 81 30.24 48 10 25 56 30.11 37 10 10 19 16 31 30.05 26 10 0.00 242
2015-04-01 None 1 16 28 40 30.17 47 10 21 29 29.99 39 10 10 7 1 17 29.79 30 10 0.00 332
2015-04-10 Rain 8 52 25 100 30.30 55 10 20 95 29.94 46 4 8 42 36 89 29.65 36 0 0.09 114
2015-04-11 None 1 50 39 89 30.10 57 10 30 61 29.86 50 10 17 32 26 32 29.72 42 10 0.00 274
2015-04-12 None 1 35 22 59 30.29 68 10 16 39 30.21 54 10 9 28 25 19 30.12 39 10 0.00 258
2015-04-13 None 3 42 29 66 30.36 69 10 24 43 30.26 55 10 12 34 27 20 30.14 41 10 0.00 194
2015-04-14 Rain 6 52 35 80 30.13 65 10 25 54 30.08 59 10 11 39 30 28 30.03 52 10 0.01 245
2015-04-15 None 1 31 35 39 30.38 67 10 25 28 30.15 59 10 12 23 16 16 30.06 50 10 0.00 325
2015-04-16 None 3 32 26 67 30.51 60 10 23 46 30.39 51 10 10 23 16 24 30.26 41 10 0.00 130
2015-04-17 Rain 6 54 28 89 30.24 65 10 22 70 29.99 56 10 13 47 30 50 29.86 47 7 0.06 237
2015-04-18 None 1 47 35 89 30.09 60 10 28 68 29.94 52 10 9 42 38 47 29.83 43 10 0.00 14
2015-04-19 None 3 38 24 76 30.29 50 10 18 66 30.23 46 10 11 34 32 56 30.09 41 10 0.00 75
2015-04-02 None 5 37 37 61 30.25 61 10 29 44 30.10 46 10 13 20 8 27 29.88 30 10 0.00 223
2015-04-20 Rain 8 51 32 100 30.25 51 10 25 90 30.02 46 6 14 42 35 79 29.73 41 1 0.61 107
2015-04-21 Fog-Rain-Thunderstorm 6 57 94 100 29.75 65 10 20 71 29.60 56 5 10 49 36 42 29.53 46 0 0.54 184
2015-04-22 Rain 3 46 41 89 29.80 67 10 35 59 29.69 55 10 15 39 32 28 29.53 43 10 0.00 186
2015-04-23 None 5 40 33 71 29.70 51 10 25 49 29.62 45 10 16 27 18 27 29.54 38 10 0.00 272
2015-04-24 Snow 5 28 36 64 29.79 50 10 23 49 29.73 44 10 16 24 20 34 29.70 37 3 0.00 292
2015-04-25 None 3 33 29 60 29.79 56 10 18 46 29.74 46 10 11 26 21 32 29.68 36 10 0.00 315
2015-04-26 None 7 39 20 71 29.72 56 10 14 53 29.66 50 10 6 33 28 35 29.62 43 10 0.00 344
2015-04-27 Rain 7 44 29 63 29.63 57 10 22 52 29.59 51 10 12 37 32 40 29.53 45 6 0.10 324
2015-04-28 Rain 5 42 35 76 29.78 64 10 26 51 29.68 53 10 14 35 29 26 29.62 42 4 0.07 8
2015-04-29 None 5 41 18 77 29.80 54 10 16 64 29.70 51 10 9 38 36 50 29.59 48 10 0.00 91
2015-04-03 Rain 8 50 31 100 29.86 59 10 24 80 29.76 52 9 12 45 39 59 29.65 45 3 0.03 221
2015-04-30 None 6 42 18 89 29.98 55 10 15 72 29.88 50 10 9 40 37 55 29.79 44 10 0.00 89
2015-04-04 Fog-Rain-Thunderstorm 6 48 49 100 30.08 52 10 37 66 29.63 44 6 16 36 13 31 29.40 36 0 0.39 269
2015-04-05 None 4 30 36 76 30.26 49 10 28 49 30.13 41 10 15 21 10 21 30.09 32 10 0.00 243
2015-04-06 None 7 37 21 92 30.40 42 10 17 74 30.30 39 10 9 31 26 55 30.22 36 10 0.00 70
2015-04-07 Rain 8 37 18 92 30.40 42 10 15 84 30.30 39 9 8 36 34 76 30.21 36 7 0.03 29
2015-04-08 Rain-Snow 6 34 30 92 30.51 42 10 24 73 30.43 38 8 17 31 25 54 30.37 34 4 0.26 52
2015-04-09 Rain 8 36 30 100 30.42 37 6 25 95 30.37 35 2 17 34 32 89 30.30 33 1 0.09 58
2015-05-01 None 6 41 22 92 30.02 49 10 17 82 30.00 44 10 8 39 37 71 29.97 39 10 0.00 85
2015-05-10 None 6 64 29 100 30.22 89 10 22 67 30.12 74 10 14 61 55 34 30.02 59 7 0.00 221
2015-05-11 None 6 65 24 93 30.14 80 10 21 78 30.10 65 9 10 55 48 62 30.06 50 5 0.00 68
2015-05-12 Rain 7 61 33 100 30.04 87 10 25 66 29.82 68 6 9 52 48 31 29.62 48 0 0.02 75
2015-05-13 None 1 43 35 59 30.22 69 10 28 44 29.97 61 10 14 37 31 29 29.77 53 10 0.00 305
2015-05-14 None 1 43 24 54 30.34 69 10 22 36 30.28 59 10 9 34 23 17 30.24 49 10 0.00 281
2015-05-15 None 5 49 18 64 30.31 67 10 15 47 30.25 58 10 6 39 32 29 30.20 48 10 0.00 134
2015-05-16 None 8 57 21 90 30.21 71 10 17 67 30.17 63 10 8 50 37 44 30.12 55 10 0.00 194
2015-05-17 None 3 59 18 100 30.22 67 10 15 89 30.13 60 8 8 56 52 78 30.09 52 0 0.00 97
2015-05-18 Fog 6 52 NA 100 30.30 58 10 16 79 30.23 54 8 10 48 43 57 30.12 49 0 0.00 72
2015-05-19 Rain 8 63 23 100 30.09 65 10 16 92 29.90 59 8 10 56 48 83 29.72 52 2 0.27 203
2015-05-02 None 4 43 16 92 30.04 50 10 13 82 30.00 45 10 7 40 37 71 29.96 39 10 0.00 103
2015-05-20 None 4 63 35 93 29.92 66 10 26 65 29.78 59 10 14 41 30 36 29.70 51 7 0.00 288
2015-05-21 None 4 41 23 61 29.98 67 10 17 44 29.91 56 10 10 36 30 26 29.85 45 10 0.00 211
2015-05-22 Rain 4 44 37 64 30.06 76 10 26 40 29.86 64 10 13 34 24 16 29.78 52 10 0.00 264
2015-05-23 None 0 32 32 50 30.33 65 10 22 34 30.26 55 10 13 23 18 18 30.07 44 10 0.00 285
2015-05-24 None 3 48 30 59 30.29 83 10 23 40 30.22 67 10 16 39 33 20 30.14 51 10 0.00 237
2015-05-25 Rain 6 57 26 73 30.24 81 10 20 54 30.20 70 10 11 52 49 35 30.15 58 10 0.00 209
2015-05-26 None 6 62 28 73 30.16 87 10 23 59 30.12 76 10 16 58 53 44 30.09 64 10 0.00 217
2015-05-27 None 4 66 32 87 30.16 85 10 26 71 30.12 75 10 16 63 59 55 30.06 65 10 0.00 207
2015-05-28 Rain 6 67 29 87 30.21 86 10 23 69 30.12 75 10 13 62 55 51 30.04 64 10 0.00 216
2015-05-29 Fog 4 61 20 100 30.31 72 10 17 80 30.27 64 8 8 57 54 59 30.22 55 0 0.00 48
2015-05-03 None 4 48 21 76 30.15 67 10 17 61 30.06 56 10 9 42 39 45 30.01 45 10 0.00 176
2015-05-30 None 2 63 33 93 30.22 88 10 26 66 30.12 73 10 15 60 56 39 30.03 58 10 0.00 205
2015-05-31 Rain 7 69 36 100 30.28 77 10 31 85 30.14 63 8 14 55 46 69 30.02 48 1 0.91 28
2015-05-04 None 2 48 37 80 30.19 84 10 30 52 30.13 67 10 13 43 37 23 30.06 49 10 0.00 206
2015-05-05 Rain 5 59 25 93 30.22 70 10 21 66 30.16 62 10 10 50 41 39 30.07 54 7 0.02 183
2015-05-06 None 3 52 25 89 30.31 73 10 20 59 30.24 63 10 9 40 31 29 30.16 52 10 0.00 122
2015-05-07 None 1 45 28 47 30.21 79 10 22 34 30.14 66 10 11 38 30 21 30.05 53 10 0.00 205
2015-05-08 None 4 46 25 86 30.32 71 10 22 61 30.20 59 10 12 43 40 35 30.09 46 9 0.00 35
2015-05-09 None 7 60 23 97 30.37 71 10 18 82 30.30 59 9 8 50 43 66 30.21 46 3 0.00 117
2015-06-01 Rain 8 48 26 100 30.27 49 6 21 97 30.25 48 3 14 47 46 93 30.23 47 2 0.38 43
2015-06-10 None 3 59 26 78 29.85 82 10 20 54 29.80 72 10 11 54 47 30 29.71 62 10 0.00 245
2015-06-11 None 7 66 29 78 29.91 88 10 22 56 29.82 76 9 14 58 48 33 29.78 64 7 0.00 248
2015-06-12 None 6 67 24 79 30.01 79 10 18 60 29.92 72 10 9 55 49 41 29.77 65 10 0.00 202
2015-06-13 None 6 68 26 84 29.99 85 10 21 56 29.87 75 10 9 59 47 27 29.72 64 10 0.00 2
2015-06-14 None 5 56 21 73 30.12 74 10 17 56 30.06 68 10 10 51 45 38 29.99 62 10 0.00 67
2015-06-15 Rain 8 56 23 100 30.14 63 10 21 84 30.09 59 5 9 53 51 67 30.04 54 1 0.40 113
2015-06-16 Rain 7 66 18 100 30.01 71 10 13 91 29.88 64 6 5 59 56 81 29.78 56 0 0.00 87
2015-06-17 None 5 56 28 73 30.18 69 10 23 55 30.14 64 10 10 46 38 37 30.08 59 10 0.00 111
2015-06-18 None 5 54 23 72 30.14 76 10 17 59 30.04 67 10 10 49 45 46 29.93 57 10 0.00 189
2015-06-19 None 6 63 26 84 30.05 86 10 20 64 29.90 75 10 10 57 47 43 29.85 63 10 0.00 272
2015-06-02 Rain 8 46 26 100 30.22 49 10 20 93 30.19 48 7 11 45 44 86 30.17 46 2 0.74 33
2015-06-20 None 5 58 23 78 30.15 75 10 18 64 30.10 67 10 9 51 46 49 30.03 58 10 0.04 76
2015-06-21 Rain 8 72 22 100 29.96 76 10 17 91 29.74 68 5 6 65 59 82 29.63 60 0 1.72 92
2015-06-22 Fog 6 65 15 100 29.99 77 10 13 84 29.85 69 5 6 62 60 68 29.76 61 0 0.00 89
2015-06-23 Rain 6 72 33 100 29.96 88 10 28 80 29.81 74 10 12 66 59 60 29.68 60 9 0.01 201
2015-06-24 None 2 60 28 73 29.97 84 10 20 52 29.90 76 10 11 54 46 30 29.78 67 10 0.00 298
2015-06-25 None 4 61 21 76 30.03 81 10 15 56 29.98 73 10 7 55 52 36 29.93 64 10 0.00 292
2015-06-26 Rain 5 58 20 84 30.09 72 10 16 68 30.01 66 10 8 53 46 52 29.94 59 10 0.00 41
2015-06-27 Rain 6 58 0 93 30.19 68 10 38 76 30.14 63 10 8 55 48 58 30.09 57 7 0.20 108
2015-06-28 Rain 8 59 36 100 30.07 59 7 29 94 29.80 56 3 18 56 51 87 29.69 52 1 1.43 39
2015-06-29 None 7 61 21 93 29.94 75 10 15 80 29.84 64 9 7 56 50 66 29.78 53 2 0.00 216
2015-06-03 None 7 48 NA 93 30.31 56 10 14 82 30.24 52 10 7 45 43 71 30.19 47 10 0.00 90
2015-06-30 None 4 62 17 97 30.01 75 10 14 81 29.97 68 10 7 60 57 64 29.94 60 10 0.00 155
2015-06-04 None 5 46 21 86 30.35 58 10 16 74 30.30 54 10 6 45 42 61 30.24 49 10 0.00 113
2015-06-05 None 5 51 22 93 30.24 59 10 20 83 30.09 55 10 8 48 45 72 29.93 50 10 0.00 106
2015-06-06 Rain 5 55 28 100 30.08 67 10 20 73 29.94 60 10 7 51 39 46 29.85 52 2 0.09 54
2015-06-07 None 3 47 23 60 30.23 67 10 21 47 30.16 60 10 11 40 35 34 30.09 53 10 0.00 76
2015-06-08 Rain 6 58 40 89 30.13 76 10 29 71 29.95 65 10 17 53 42 52 29.82 53 10 0.00 200
2015-06-09 Rain 6 65 26 93 29.79 78 10 23 81 29.70 71 10 13 63 59 69 29.63 64 9 0.00 199
2015-07-01 Rain-Thunderstorm 6 68 28 100 29.93 82 10 22 78 29.78 72 8 10 64 60 55 29.68 62 0 0.50 164
2015-07-10 Rain 6 66 17 100 29.96 77 10 15 74 29.90 69 7 8 61 55 47 29.83 60 2 1.12 85
2015-07-11 None 1 61 17 61 30.04 83 10 13 49 30.01 76 10 8 57 54 37 29.96 68 10 0.00 282
2015-07-12 None 4 67 23 67 30.00 89 10 15 54 29.95 81 10 9 61 57 40 29.90 72 10 0.00 249
2015-07-13 None 6 67 17 93 29.95 77 10 15 81 29.91 72 10 6 65 61 68 29.86 67 7 0.00 68
2015-07-14 Rain 5 70 24 93 29.85 82 10 21 72 29.71 74 10 8 67 60 51 29.62 65 3 0.03 144
2015-07-15 Rain 7 72 26 100 29.89 82 10 20 87 29.67 75 10 7 68 57 73 29.58 67 7 0.00 99
2015-07-16 None 3 55 25 78 30.07 68 10 18 65 30.02 64 10 11 51 48 52 29.91 59 10 0.00 59
2015-07-17 None 5 61 25 84 30.12 75 10 17 72 30.08 68 10 9 58 53 60 30.03 60 10 0.00 151
2015-07-18 Rain 7 68 28 93 30.04 78 10 21 81 29.95 71 10 11 65 61 69 29.86 64 2 0.14 200
2015-07-19 Rain 6 74 25 93 29.87 90 10 20 73 29.80 81 10 9 71 68 52 29.70 71 7 0.00 206
2015-07-02 None 4 60 23 78 29.89 80 10 16 60 29.86 72 10 9 56 54 42 29.81 64 10 0.00 265
2015-07-20 None 4 73 28 93 29.71 92 10 20 62 29.66 81 10 9 66 52 30 29.63 70 7 0.00 272
2015-07-21 None 5 68 24 79 29.66 81 10 16 66 29.61 76 10 7 63 59 52 29.55 70 10 0.00 256
2015-07-22 None 3 66 29 84 29.81 84 10 22 58 29.67 77 10 12 55 48 31 29.57 69 10 0.00 309
2015-07-23 None 4 58 21 68 29.88 82 10 14 52 29.84 75 10 7 54 52 36 29.82 67 10 0.00 303
2015-07-24 Rain 4 61 28 81 29.94 81 10 20 60 29.90 74 10 9 56 51 39 29.88 66 7 0.01 320
2015-07-25 None 5 61 20 93 30.06 69 10 16 81 30.02 66 10 9 59 57 68 29.94 62 10 0.00 50
2015-07-26 Rain 7 68 22 93 30.05 79 10 14 79 30.01 71 10 8 64 60 64 29.96 63 10 0.00 181
2015-07-27 Rain 5 69 24 93 30.03 86 10 18 74 30.00 77 10 8 67 65 55 29.97 68 10 0.06 200
2015-07-28 None 3 70 18 97 29.99 86 10 16 80 29.96 78 10 8 69 66 63 29.93 70 10 0.00 181
2015-07-29 None 3 69 20 90 29.96 92 10 16 66 29.92 82 10 7 67 63 41 29.87 71 10 0.00 190
2015-07-03 None 2 56 17 73 30.00 76 10 15 56 29.94 70 10 9 53 49 38 29.87 63 10 0.00 63
2015-07-30 Rain 5 73 33 93 29.89 91 10 25 73 29.82 83 10 14 70 67 52 29.75 74 7 0.02 223
2015-07-31 None 2 71 31 93 29.81 89 10 23 61 29.78 81 10 11 59 52 29 29.75 73 10 0.00 263
2015-07-04 None 6 62 12 87 30.01 72 10 10 75 29.99 67 10 4 58 55 63 29.95 62 10 0.00 126
2015-07-05 None 1 61 22 90 30.13 83 10 13 67 30.05 72 9 8 59 57 43 29.99 61 7 0.00 252
2015-07-06 None 3 66 18 84 30.17 80 10 15 69 30.13 74 10 7 63 59 54 30.09 68 8 0.00 165
2015-07-07 Rain 5 72 29 93 30.12 84 10 23 77 30.05 75 10 10 68 63 61 29.92 65 10 0.02 160
2015-07-08 Rain 5 71 25 93 30.00 88 10 20 68 29.90 79 9 11 67 55 42 29.87 69 6 0.00 272
2015-07-09 Rain 6 60 18 93 30.03 69 10 15 77 29.98 66 10 8 57 55 61 29.87 63 5 0.15 67
2015-08-01 Rain 3 61 35 66 29.82 90 10 26 50 29.75 79 10 10 58 55 34 29.70 68 10 0.00 251
2015-08-10 None 3 62 24 87 30.06 83 10 21 67 30.02 73 10 10 59 56 47 29.97 63 10 0.00 212
2015-08-11 Rain 7 70 24 100 30.01 72 10 21 94 29.84 68 7 10 67 62 87 29.73 64 1 0.83 171
2015-08-12 None 4 70 21 100 29.88 85 10 15 70 29.76 77 10 9 63 56 40 29.71 68 10 0.00 257
2015-08-13 None 2 62 18 78 30.09 82 10 17 62 29.98 74 10 8 59 57 45 29.89 66 10 0.00 296
2015-08-14 None 1 61 23 78 30.14 86 10 17 57 30.11 75 10 9 57 52 36 30.06 63 10 0.00 225
2015-08-15 Rain-Thunderstorm 6 69 25 87 30.11 91 10 20 64 30.07 80 10 8 63 55 41 30.01 68 8 0.08 192
2015-08-16 None 3 68 22 93 30.09 90 10 17 70 30.07 79 10 7 66 64 46 30.04 67 10 0.00 221
2015-08-17 None 2 71 21 84 30.08 91 10 15 64 30.04 81 10 8 67 64 44 29.99 71 10 0.00 209
2015-08-18 Rain-Thunderstorm 4 71 38 90 30.03 87 10 29 76 30.01 79 8 8 69 65 61 29.97 71 0 0.14 192
2015-08-19 None 3 70 22 93 30.10 88 10 18 72 30.06 80 10 9 68 64 51 30.03 71 7 0.00 204
2015-08-02 None 1 63 26 73 29.90 88 10 20 52 29.86 78 10 11 54 51 30 29.82 68 10 0.00 254
2015-08-20 None 4 70 25 100 30.12 78 10 22 88 30.09 73 9 11 69 68 76 30.04 68 0 0.00 115
2015-08-21 Fog-Rain-Thunderstorm 7 75 20 100 30.05 83 10 14 87 30.02 75 4 6 70 66 74 29.98 67 0 0.63 91
2015-08-22 Fog 7 70 18 100 30.11 73 10 15 90 30.08 70 9 7 66 64 79 30.03 67 0 0.00 53
2015-08-23 Rain 8 70 25 100 30.06 71 10 14 97 30.01 69 3 8 68 66 93 29.96 67 0 0.02 22
2015-08-24 None 7 69 16 100 29.96 75 10 14 92 29.92 72 7 6 68 67 84 29.87 68 1 0.00 89
2015-08-25 Fog 6 72 21 100 29.91 81 10 17 81 29.89 74 6 9 69 66 62 29.83 67 0 0.00 133
2015-08-26 Rain 4 70 22 100 29.95 85 10 16 71 29.89 77 10 8 64 56 42 29.86 69 6 0.00 246
2015-08-27 None 2 56 22 68 30.07 82 10 17 54 29.98 74 10 10 54 52 39 29.94 65 10 0.00 289
2015-08-28 None 2 62 18 73 30.17 75 10 14 63 30.13 70 10 8 56 53 53 30.08 64 10 0.00 188
2015-08-29 None 3 58 22 78 30.19 82 10 16 59 30.14 73 10 7 55 53 39 30.08 63 10 0.00 242
2015-08-03 Thunderstorm 2 68 30 100 29.87 90 10 23 67 29.81 79 10 13 64 58 34 29.75 68 7 0.00 201
2015-08-30 None 5 65 26 78 30.09 88 10 17 58 30.03 79 10 9 61 58 37 29.98 69 10 0.00 254
2015-08-31 None 2 66 32 79 30.00 90 10 22 60 29.93 81 10 11 63 60 40 29.86 71 10 0.00 265
2015-08-04 Fog-Rain-Hail-Thunderstorm 5 72 51 90 29.88 89 10 38 68 29.83 78 8 9 66 62 46 29.76 66 0 0.49 222
2015-08-05 None 3 65 29 81 29.89 85 10 23 58 29.85 75 10 11 57 51 34 29.79 65 10 0.00 260
2015-08-06 None 3 55 22 67 29.93 82 10 18 51 29.90 74 10 9 53 50 35 29.86 65 10 0.00 278
2015-08-07 None 2 61 20 87 29.97 73 10 16 70 29.95 69 10 8 57 54 53 29.92 64 10 0.00 37
2015-08-08 None 4 61 NA 87 30.02 76 10 14 68 29.99 69 10 6 57 54 49 29.95 61 10 0.00 45
2015-08-09 None 5 61 26 93 30.05 73 10 20 80 30.03 68 10 9 59 57 66 30.00 62 10 0.00 36
2015-09-01 None 1 63 NA 78 30.06 79 10 15 65 30.02 74 10 9 62 59 52 29.96 69 10 0.00 54
2015-09-10 Rain 7 71 26 93 29.91 77 10 21 81 29.86 71 10 11 65 61 69 29.79 64 4 0.17 23
2015-09-11 Rain 7 63 33 100 29.82 73 10 25 84 29.75 68 8 10 61 59 68 29.69 63 2 0.66 15
2015-09-12 Rain 6 63 17 100 29.89 71 10 16 87 29.84 66 10 7 61 59 73 29.79 60 6 0.01 118
2015-09-13 Rain 8 65 23 100 29.79 66 10 20 94 29.75 65 6 10 62 59 87 29.71 63 0 0.38 85
2015-09-14 None 3 63 36 90 30.07 72 10 24 70 29.88 65 10 15 54 51 49 29.72 57 10 0.00 267
2015-09-15 None 0 58 22 67 30.25 84 10 16 52 30.20 73 10 11 54 51 36 30.09 62 10 0.00 278
2015-09-16 None 1 64 21 78 30.32 81 10 13 62 30.26 73 10 7 59 57 45 30.20 65 10 0.00 207
2015-09-17 None 1 65 20 84 30.19 89 10 14 58 30.10 77 10 7 59 53 31 30.02 64 10 0.00 231
2015-09-18 None 1 62 22 87 30.04 85 10 17 64 30.00 75 10 8 60 57 40 29.95 65 10 0.00 199
2015-09-19 None 4 67 21 100 30.00 79 10 17 74 29.95 71 8 10 62 57 48 29.87 62 1 0.00 198
2015-09-02 None 0 68 21 87 30.04 91 10 15 63 29.94 79 10 9 63 59 38 29.85 66 9 0.00 231
2015-09-20 None 4 66 24 90 30.13 75 10 18 63 29.96 66 10 12 55 46 36 29.83 57 10 0.00 295
2015-09-21 None 3 48 24 72 30.30 66 10 20 60 30.24 60 10 11 46 45 48 30.14 53 10 0.00 26
2015-09-22 None 6 57 20 93 30.34 68 10 16 76 30.31 62 10 9 53 48 58 30.28 56 10 0.00 30
2015-09-23 None 2 54 15 93 30.27 68 10 10 68 30.24 61 10 6 49 42 42 30.21 54 10 0.00 61
2015-09-24 None 1 54 20 78 30.39 74 10 16 62 30.31 66 10 9 52 48 46 30.22 58 10 0.00 26
2015-09-25 None 5 55 21 86 30.44 66 10 17 72 30.40 61 10 9 50 47 58 30.38 55 10 0.00 51
2015-09-26 None 4 49 28 77 30.53 63 10 20 64 30.49 57 10 10 45 39 51 30.40 50 10 0.00 42
2015-09-27 None 2 57 18 93 30.52 64 10 15 75 30.44 56 10 7 49 42 57 30.35 48 10 0.00 222
2015-09-28 None 4 66 20 93 30.34 78 10 16 75 30.23 67 10 7 60 53 56 30.15 56 10 0.00 185
2015-09-29 Fog-Rain 7 70 25 100 30.14 84 10 21 79 30.06 75 7 9 68 64 58 29.98 65 0 0.04 186
2015-09-03 Rain-Thunderstorm 4 68 14 84 29.94 82 10 12 73 29.87 76 9 6 66 65 62 29.83 70 7 0.01 91
2015-09-30 Fog-Rain 8 73 38 100 29.96 78 10 32 89 29.77 68 6 13 67 51 78 29.63 57 0 2.46 182
2015-09-04 Rain 6 69 32 93 30.27 72 10 23 78 30.14 67 9 11 60 55 63 29.94 62 5 0.00 47
2015-09-05 None 1 58 16 93 30.31 73 10 14 70 30.26 66 10 7 54 49 47 30.22 58 10 0.00 94
2015-09-06 None 1 63 23 90 30.22 82 10 18 69 30.16 72 10 10 59 57 48 30.10 61 10 0.00 190
2015-09-07 None 1 65 25 73 30.10 93 10 21 55 30.00 80 10 12 59 51 36 29.92 66 10 0.00 231
2015-09-08 None 2 72 24 84 29.97 96 10 21 63 29.94 84 9 7 67 64 41 29.90 72 6 0.20 225
2015-09-09 None 3 71 28 84 29.94 93 10 22 60 29.85 83 10 13 68 62 36 29.78 72 10 0.00 214
2015-10-01 Rain 7 50 38 77 30.24 59 10 30 72 30.13 57 10 17 48 45 67 29.97 54 10 0.00 22
2015-10-10 None 2 55 37 74 30.09 61 10 29 53 30.02 55 10 10 40 31 32 29.80 48 10 0.00 313
2015-10-11 None 4 49 28 86 30.03 68 10 23 63 29.90 58 10 14 45 43 39 29.79 48 10 0.00 222
2015-10-12 None 0 56 NA 89 29.86 76 10 15 65 29.80 64 10 8 51 48 41 29.74 51 10 0.00 199
2015-10-13 Fog-Rain 6 62 21 100 29.93 72 10 16 84 29.60 64 7 8 58 52 68 29.47 55 0 0.12 148
2015-10-14 None 3 57 28 84 29.81 68 10 21 65 29.66 60 10 13 46 37 45 29.56 51 10 0.00 262
2015-10-15 None 1 42 24 71 29.96 62 10 16 55 29.91 55 10 9 38 36 39 29.82 47 10 0.00 266
2015-10-16 Rain 3 45 29 74 29.98 61 10 22 57 29.90 56 10 12 40 35 39 29.84 50 10 0.00 262
2015-10-17 None 4 40 29 83 30.14 56 10 23 58 30.01 48 10 12 32 24 32 29.95 40 10 0.00 287
2015-10-18 None 2 29 30 64 30.33 47 10 22 46 30.22 40 10 11 19 13 28 30.13 33 10 0.00 319
2015-10-19 None 2 31 22 69 30.45 48 10 17 48 30.34 40 10 11 20 15 26 30.18 31 10 0.00 275
2015-10-02 Rain 8 45 36 80 30.36 54 10 25 73 30.28 52 10 20 43 40 66 30.22 50 7 0.08 28
2015-10-20 None 6 43 28 65 30.21 66 10 21 51 30.13 56 10 12 37 32 36 30.07 45 10 0.00 234
2015-10-21 Rain 8 54 16 100 30.33 61 10 13 76 30.28 57 9 6 48 42 51 30.17 53 4 0.07 68
2015-10-22 Fog 7 56 29 100 30.28 73 10 24 71 30.13 63 7 11 52 47 41 29.96 52 0 0.00 187
2015-10-23 None 2 38 35 60 30.37 59 10 26 49 30.19 50 10 14 31 26 38 30.03 40 10 0.00 320
2015-10-24 None 8 42 16 80 30.44 49 10 13 71 30.37 44 10 6 35 28 61 30.25 38 10 0.00 4
2015-10-25 Rain 7 54 35 89 30.19 63 10 24 72 30.07 56 10 12 47 35 55 29.98 48 7 0.03 233
2015-10-26 None 2 36 26 70 30.53 52 10 18 57 30.40 48 10 9 33 30 44 30.21 43 10 0.00 294
2015-10-27 None 4 41 22 83 30.62 54 10 12 62 30.56 46 10 6 34 28 41 30.53 38 10 0.00 178
2015-10-28 Rain 7 61 40 100 30.57 65 10 29 83 30.27 54 7 17 48 39 66 29.79 42 2 0.36 114
2015-10-29 Rain 7 66 39 100 29.75 75 10 29 65 29.55 66 8 17 57 30 30 29.44 57 2 0.73 206
2015-10-03 Rain 8 47 37 80 30.46 54 10 29 72 30.42 52 9 22 43 41 64 30.35 49 5 0.01 39
2015-10-30 None 1 37 31 53 30.09 61 10 23 41 29.83 52 10 13 31 26 28 29.64 42 10 0.00 289
2015-10-31 None 4 39 17 71 30.22 52 10 13 58 30.14 45 10 7 31 26 44 30.06 38 10 0.00 224
2015-10-04 None 7 45 35 77 30.44 56 10 28 66 30.39 54 10 18 42 38 54 30.30 51 10 0.00 40
2015-10-05 None 6 50 18 96 30.29 61 10 15 80 30.20 55 10 9 47 41 64 30.09 48 10 0.00 14
2015-10-06 None 1 49 15 89 30.08 64 10 12 71 30.00 56 10 6 46 43 52 29.94 48 10 0.00 344
2015-10-07 None 3 54 17 77 29.99 72 10 13 61 29.95 62 10 7 47 43 44 29.90 52 10 0.00 299
2015-10-08 None 2 50 18 83 30.16 62 10 13 61 30.11 57 10 9 44 35 39 30.00 51 10 0.00 14
2015-10-09 Rain 7 63 40 93 30.12 72 10 31 75 29.85 62 8 15 57 49 57 29.72 52 2 0.34 210
2015-11-01 Rain 6 50 28 80 30.07 62 10 22 73 29.91 55 10 11 46 39 65 29.79 48 10 0.00 207
2015-11-10 Rain 7 47 22 80 30.31 53 10 17 67 30.15 49 10 8 40 36 54 29.89 44 7 0.07 37
2015-11-11 Rain 8 49 33 93 29.98 50 10 25 90 29.85 48 4 16 45 42 86 29.78 46 2 0.54 13
2015-11-12 Rain 8 54 23 100 29.98 57 10 18 90 29.75 52 8 7 47 42 80 29.42 46 0 0.04 173
2015-11-13 Rain 3 54 39 86 29.62 59 10 29 65 29.51 53 10 18 39 30 44 29.43 46 10 0.01 257
2015-11-14 None 2 31 43 62 30.12 47 10 31 51 29.89 42 10 16 25 19 39 29.63 37 10 0.00 279
2015-11-15 None 6 35 23 64 30.21 54 10 18 54 30.12 46 10 10 30 25 44 30.05 37 10 0.00 254
2015-11-16 None 3 37 28 66 30.41 61 10 21 42 30.18 50 10 11 29 14 17 30.09 39 10 0.00 306
2015-11-17 None 1 31 17 76 30.60 45 10 14 62 30.54 39 10 7 26 20 48 30.42 33 10 0.00 35
2015-11-18 None 2 38 17 85 30.61 48 10 15 69 30.55 40 10 6 33 29 53 30.46 31 10 0.00 158
2015-11-19 Rain 8 50 20 89 30.44 55 10 16 83 30.30 49 10 9 44 39 77 30.06 43 10 0.00 132
2015-11-02 None 2 48 23 83 30.11 64 10 18 63 30.02 58 10 7 42 39 43 29.94 51 10 0.00 251
2015-11-20 Rain 6 58 29 100 30.18 61 10 25 69 30.02 53 7 13 47 26 38 29.94 44 2 0.86 266
2015-11-21 None 4 31 16 70 30.30 48 10 13 60 30.20 43 10 8 28 23 49 30.04 38 10 0.00 1
2015-11-22 Rain 8 44 25 89 30.00 49 10 20 80 29.91 43 9 7 39 31 70 29.82 36 5 0.30 341
2015-11-23 Rain 3 36 31 85 30.15 42 10 22 56 29.94 36 10 13 18 5 27 29.80 30 10 0.04 316
2015-11-24 None 1 21 22 50 30.53 44 10 15 42 30.33 37 10 8 16 11 33 30.16 29 10 0.00 271
2015-11-25 None 1 34 18 76 30.88 44 10 14 63 30.76 37 10 6 27 20 49 30.54 30 10 0.00 83
2015-11-26 None 6 49 28 100 30.87 59 10 22 79 30.77 49 9 10 42 34 57 30.64 38 5 0.00 180
2015-11-27 None 7 52 32 100 30.63 64 10 26 78 30.41 56 9 14 49 47 56 30.15 48 5 0.00 209
2015-11-28 Rain 8 50 23 93 30.20 60 10 18 80 30.16 51 9 10 43 36 67 30.11 41 4 0.21 358
2015-11-29 None 4 33 20 79 30.42 44 10 16 58 30.26 38 10 10 23 15 36 30.19 32 10 0.00 326
2015-11-03 None 1 44 NA 82 30.25 73 10 16 57 30.13 60 10 8 42 40 31 30.06 47 10 0.00 281
2015-11-30 None 6 26 17 75 30.53 38 10 14 65 30.46 33 10 9 23 18 54 30.39 28 10 0.00 65
2015-11-04 None 0 49 16 83 30.40 60 10 13 69 30.33 55 10 7 45 43 55 30.26 49 10 0.00 129
2015-11-05 None 4 61 31 100 30.30 76 10 22 77 30.20 63 9 12 55 48 53 30.09 50 5 0.00 224
2015-11-06 None 4 62 32 93 30.07 73 10 26 79 29.90 68 10 15 61 54 64 29.71 62 10 0.00 222
2015-11-07 None 6 45 33 57 30.02 69 10 25 48 29.93 60 10 13 38 33 39 29.83 50 10 0.00 280
2015-11-08 None 0 34 25 65 30.38 56 10 18 48 30.25 50 10 12 30 24 30 30.04 44 10 0.00 283
2015-11-09 None 2 36 20 70 30.43 60 10 16 52 30.37 51 10 9 32 30 33 30.32 41 10 0.00 237
2015-12-01 Rain 7 43 17 96 30.40 45 10 15 83 30.24 39 8 6 35 25 69 30.01 32 1 0.14 109

Your data are now tidy and in an easy format for others to examine!

# Save our tidy dataframe to csv file
write.csv(weather6,'../xDatasets/weather_clean.csv')